package com.jay.nio.channel.clazz.DatagramChannel;

import java.net.InetSocketAddress;
import java.net.SocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.DatagramChannel;

public class UDPServer {
	 public static void main(String[] args) throws Exception{
	        // 使用DatagramChannel的open工厂方法创建一个数据报信道实例,该实例未绑定
	        DatagramChannel channel=DatagramChannel.open();
	        
	        // 将该数据报信道实例的底层套接字绑定到5000端口
	        channel.socket().bind(new InetSocketAddress(5000));
	        
	        // 使用ByteBuffer的静态方法创建一个新缓冲区,最长接收为60字节的数据报文
	        ByteBuffer bf=ByteBuffer.allocate(60);
	        
	        while(true){
	            System.out.println("监听开始");
	            
	            // 将接收到的数据报文存入指定的缓冲区并返回发送者的地址,如果缓冲区的剩余空间小于数据报文中的数据大小,多余的数据将毫无提示的丢失
	            SocketAddress remoteAddress=channel.receive(bf);
	            
	            // 使用一个线程获得和返回信息
	            new ProcessClientRequestThread(channel,remoteAddress,bf);
	        }
	    }

}
